package com.woniu.zsd.recycle.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class RabbitMQConfig {
    //保存发送注册验证码的手机号的队列
    @Bean
    public Queue regCodeQueue(){
        return new Queue("send_reg_code_queue");
    }


    @Bean
    public Queue waitingPostAppraiseQueue(){
        Map<String, Object> params = new HashMap<>();
        //定义该队列中消息的生存时间 单位毫秒 生存时间最终对应业务的延迟执行时间
        params.put("x-message-ttl", 180 * 1000);
        // x-dead-letter-exchange 属性用于声明死信转发到的交换机
        params.put("x-dead-letter-exchange", "d1");
        // x-dead-letter-routing-key 声明了这些死信在转发时携带的路由键名称。
        params.put("x-dead-letter-routing-key", "waiting_appraise");
        return new Queue("waiting_appraise_queue",true,false,true,params);
    }
    @Bean
    public Queue allocationStationQueue(){
        Map<String, Object> params = new HashMap<>();
        System.out.println("aaaaaaaaaaaaa");
        //定义该队列中消息的生存时间 单位毫秒 生存时间最终对应业务的延迟执行时间
        params.put("x-message-ttl", 180 * 1000);
        // x-dead-letter-exchange 属性用于声明死信转发到的交换机
        params.put("x-dead-letter-exchange", "d2");
        // x-dead-letter-routing-key 声明了这些死信在转发时携带的路由键名称。
        params.put("x-dead-letter-routing-key", "allocation_station");
        return new Queue("waiting_allocation_station_queue",true,false,false,params);
    }
    @Bean
    public Queue waitingDeleteCacheQueue(){
        Map<String, Object> params = new HashMap<>();
        //定义该队列中消息的生存时间 单位毫秒 生存时间最终对应业务的延迟执行时间
        params.put("x-message-ttl", 30 * 1000);
        // x-dead-letter-exchange 属性用于声明死信转发到的交换机
        params.put("x-dead-letter-exchange", "d3");
        // x-dead-letter-routing-key 声明了这些死信在转发时携带的路由键名称。
        params.put("x-dead-letter-routing-key", "delete_cache");
        return new Queue("waiting_delete_cache_queue",true,false,false,params);
    }
    @Bean
    public DirectExchange deadLetterExchange() {
        return new DirectExchange("d2");
    }

    @Bean
    public Queue deadLetterQueue() {
        return new Queue("allocation_station_queue");
    }

    @Bean
    public Binding bindingDeadLetter() {
        return BindingBuilder.bind(deadLetterQueue())
                .to(deadLetterExchange())
                .with("allocation_station");
    }

}
